{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Link prediction with GCN"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx": "hidden",
    "tags": [
     "CloudRunner"
    ]
   },
   "source": [
    "<table><tr><td>Run the latest release of this notebook:</td><td><a href=\"https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/gcn-link-prediction.ipynb\" alt=\"Open In Binder\" target=\"_parent\"><img src=\"https://mybinder.org/badge_logo.svg\"/></a></td><td><a href=\"https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/gcn-link-prediction.ipynb\" alt=\"Open In Colab\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\"/></a></td></tr></table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this example, we use our implementation of the [GCN](https://arxiv.org/abs/1609.02907) algorithm to build a model that predicts citation links in the Cora dataset (see below). The problem is treated as a supervised link prediction problem on a homogeneous citation network with nodes representing papers (with attributes such as binary keyword indicators and categorical subject) and links corresponding to paper-paper citations. \n",
    "\n",
    "To address this problem, we build a model with the following architecture. First we build a two-layer GCN model that takes labeled node pairs (`citing-paper` -> `cited-paper`)  corresponding to possible citation links, and outputs a pair of node embeddings for the `citing-paper` and `cited-paper` nodes of the pair. These embeddings are then fed into a link classification layer, which first applies a binary operator to those node embeddings (e.g., concatenating them) to construct the embedding of the potential link. Thus obtained link embeddings are passed through the dense link classification layer to obtain link predictions - probability for these candidate links to actually exist in the network. The entire model is trained end-to-end by minimizing the loss function of choice (e.g., binary cross-entropy between predicted link probabilities and true link labels, with true/false citation links having labels 1/0) using stochastic gradient descent (SGD) updates of the model parameters, with minibatches of 'training' links fed into the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "nbsphinx": "hidden",
    "tags": [
     "CloudRunner"
    ]
   },
   "outputs": [],
   "source": [
    "# install StellarGraph if running on Google Colab\n",
    "import sys\n",
    "if 'google.colab' in sys.modules:\n",
    "  %pip install -q stellargraph[demos]==1.2.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "nbsphinx": "hidden",
    "tags": [
     "VersionCheck"
    ]
   },
   "outputs": [],
   "source": [
    "# verify that we're using the correct version of StellarGraph for this notebook\n",
    "import stellargraph as sg\n",
    "\n",
    "try:\n",
    "    sg.utils.validate_notebook_version(\"1.2.1\")\n",
    "except AttributeError:\n",
    "    raise ValueError(\n",
    "        f\"This notebook requires StellarGraph version 1.2.1, but a different version {sg.__version__} is installed.  Please see <https://github.com/stellargraph/stellargraph/issues/1172>.\"\n",
    "    ) from None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import stellargraph as sg\n",
    "from stellargraph.data import EdgeSplitter\n",
    "from stellargraph.mapper import FullBatchLinkGenerator\n",
    "from stellargraph.layer import GCN, LinkEmbedding\n",
    "\n",
    "\n",
    "from tensorflow import keras\n",
    "from sklearn import preprocessing, feature_extraction, model_selection\n",
    "\n",
    "from stellargraph import globalvar\n",
    "from stellargraph import datasets\n",
    "from IPython.display import display, HTML\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Loading the CORA network data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "DataLoadingLinks"
    ]
   },
   "source": [
    "(See [the \"Loading from Pandas\" demo](../basics/loading-pandas.ipynb) for details on how data can be loaded.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "tags": [
     "DataLoading"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "The Cora dataset consists of 2708 scientific publications classified into one of seven classes. The citation network consists of 5429 links. Each publication in the dataset is described by a 0/1-valued word vector indicating the absence/presence of the corresponding word from the dictionary. The dictionary consists of 1433 unique words."
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataset = datasets.Cora()\n",
    "display(HTML(dataset.description))\n",
    "G, _ = dataset.load(subject_as_feature=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "StellarGraph: Undirected multigraph\n",
      " Nodes: 2708, Edges: 5429\n",
      "\n",
      " Node types:\n",
      "  paper: [2708]\n",
      "    Features: float32 vector, length 1440\n",
      "    Edge types: paper-cites->paper\n",
      "\n",
      " Edge types:\n",
      "    paper-cites->paper: [5429]\n"
     ]
    }
   ],
   "source": [
    "print(G.info())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We aim to train a link prediction model, hence we need to prepare the train and test sets of links and the corresponding graphs with those links removed.\n",
    "\n",
    "We are going to split our input graph into a train and test graphs using the EdgeSplitter class in `stellargraph.data`. We will use the train graph for training the model (a binary classifier that, given two nodes, predicts whether a link between these two nodes should exist or not) and the test graph for evaluating the model's performance on hold out data.\n",
    "Each of these graphs will have the same number of nodes as the input graph, but the number of links will differ (be reduced) as some of the links will be removed during each split and used as the positive samples for training/testing the link prediction classifier."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "From the original graph G, extract a randomly sampled subset of test edges (true and false citation links) and the reduced graph G_test with the positive test edges removed:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "** Sampled 542 positive and 542 negative edges. **\n"
     ]
    }
   ],
   "source": [
    "# Define an edge splitter on the original graph G:\n",
    "edge_splitter_test = EdgeSplitter(G)\n",
    "\n",
    "# Randomly sample a fraction p=0.1 of all positive links, and same number of negative links, from G, and obtain the\n",
    "# reduced graph G_test with the sampled links removed:\n",
    "G_test, edge_ids_test, edge_labels_test = edge_splitter_test.train_test_split(\n",
    "    p=0.1, method=\"global\", keep_connected=True\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The reduced graph G_test, together with the test ground truth set of links (edge_ids_test, edge_labels_test), will be used for testing the model.\n",
    "\n",
    "Now repeat this procedure to obtain the training data for the model. From the reduced graph G_test, extract a randomly sampled subset of train edges (true and false citation links) and the reduced graph G_train with the positive train edges removed:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "** Sampled 488 positive and 488 negative edges. **\n"
     ]
    }
   ],
   "source": [
    "# Define an edge splitter on the reduced graph G_test:\n",
    "edge_splitter_train = EdgeSplitter(G_test)\n",
    "\n",
    "# Randomly sample a fraction p=0.1 of all positive links, and same number of negative links, from G_test, and obtain the\n",
    "# reduced graph G_train with the sampled links removed:\n",
    "G_train, edge_ids_train, edge_labels_train = edge_splitter_train.train_test_split(\n",
    "    p=0.1, method=\"global\", keep_connected=True\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "G_train, together with the train ground truth set of links (edge_ids_train, edge_labels_train), will be used for training the model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Creating the GCN link model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we create the link generators for the train and test link examples to the model. The link generators take the pairs of nodes (`citing-paper`, `cited-paper`) that are given in the `.flow` method to the Keras model, together with the corresponding binary labels indicating whether those pairs represent true or false links.\n",
    "\n",
    "The number of epochs for training the model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "epochs = 50"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For training we create a generator on the `G_train` graph, and make an iterator over the training links using the generator's `flow()` method:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using GCN (local pooling) filters...\n"
     ]
    }
   ],
   "source": [
    "train_gen = FullBatchLinkGenerator(G_train, method=\"gcn\")\n",
    "train_flow = train_gen.flow(edge_ids_train, edge_labels_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using GCN (local pooling) filters...\n"
     ]
    }
   ],
   "source": [
    "test_gen = FullBatchLinkGenerator(G_test, method=\"gcn\")\n",
    "test_flow = train_gen.flow(edge_ids_test, edge_labels_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can specify our machine learning model, we need a few more parameters for this:\n",
    "\n",
    " * the `layer_sizes` is a list of hidden feature sizes of each layer in the model. In this example we use two GCN layers with 16-dimensional hidden node features at each layer.\n",
    " * `activations` is a list of activations applied to each layer's output\n",
    " * `dropout=0.3` specifies a 30% dropout at each layer. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We create a GCN model as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "gcn = GCN(\n",
    "    layer_sizes=[16, 16], activations=[\"relu\", \"relu\"], generator=train_gen, dropout=0.3\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To create a Keras model we now expose the input and output tensors of the GCN model for link prediction, via the `GCN.in_out_tensors` method:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_inp, x_out = gcn.in_out_tensors()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Final link classification layer that takes a pair of node embeddings produced by the GCN model, applies a binary operator to them to produce the corresponding link embedding (`ip` for inner product; other options for the binary operator can be seen by running a cell with `?LinkEmbedding` in it), and passes it through a dense layer:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction = LinkEmbedding(activation=\"relu\", method=\"ip\")(x_out)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The predictions need to be reshaped from `(X, 1)` to `(X,)` to match the shape of the targets we have supplied above."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction = keras.layers.Reshape((-1,))(prediction)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Stack the GCN and prediction layers into a Keras model, and specify the loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = keras.Model(inputs=x_inp, outputs=prediction)\n",
    "\n",
    "model.compile(\n",
    "    optimizer=keras.optimizers.Adam(lr=0.01),\n",
    "    loss=keras.losses.binary_crossentropy,\n",
    "    metrics=[\"acc\"],\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Evaluate the initial (untrained) model on the train and test set:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  ['...']\n",
      "1/1 [==============================] - 0s 121ms/step - loss: 1.8927 - acc: 0.5000\n",
      "  ['...']\n",
      "1/1 [==============================] - 0s 9ms/step - loss: 1.8621 - acc: 0.5000\n",
      "\n",
      "Train Set Metrics of the initial (untrained) model:\n",
      "\tloss: 1.8927\n",
      "\tacc: 0.5000\n",
      "\n",
      "Test Set Metrics of the initial (untrained) model:\n",
      "\tloss: 1.8621\n",
      "\tacc: 0.5000\n"
     ]
    }
   ],
   "source": [
    "init_train_metrics = model.evaluate(train_flow)\n",
    "init_test_metrics = model.evaluate(test_flow)\n",
    "\n",
    "print(\"\\nTrain Set Metrics of the initial (untrained) model:\")\n",
    "for name, val in zip(model.metrics_names, init_train_metrics):\n",
    "    print(\"\\t{}: {:0.4f}\".format(name, val))\n",
    "\n",
    "print(\"\\nTest Set Metrics of the initial (untrained) model:\")\n",
    "for name, val in zip(model.metrics_names, init_test_metrics):\n",
    "    print(\"\\t{}: {:0.4f}\".format(name, val))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Train the model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  ['...']\n",
      "  ['...']\n",
      "Train for 1 steps, validate for 1 steps\n",
      "Epoch 1/50\n",
      "1/1 - 1s - loss: 1.7886 - acc: 0.5000 - val_loss: 1.5024 - val_acc: 0.5387\n",
      "Epoch 2/50\n",
      "1/1 - 0s - loss: 1.7260 - acc: 0.5400 - val_loss: 0.6822 - val_acc: 0.6070\n",
      "Epoch 3/50\n",
      "1/1 - 0s - loss: 0.8526 - acc: 0.5953 - val_loss: 0.7401 - val_acc: 0.5729\n",
      "Epoch 4/50\n",
      "1/1 - 0s - loss: 0.7397 - acc: 0.5666 - val_loss: 0.7479 - val_acc: 0.5849\n",
      "Epoch 5/50\n",
      "1/1 - 0s - loss: 0.7334 - acc: 0.5799 - val_loss: 0.6777 - val_acc: 0.6172\n",
      "Epoch 6/50\n",
      "1/1 - 0s - loss: 0.6413 - acc: 0.6404 - val_loss: 0.6981 - val_acc: 0.6375\n",
      "Epoch 7/50\n",
      "1/1 - 0s - loss: 0.7289 - acc: 0.6568 - val_loss: 0.6576 - val_acc: 0.6448\n",
      "Epoch 8/50\n",
      "1/1 - 0s - loss: 0.6367 - acc: 0.6568 - val_loss: 0.6846 - val_acc: 0.6338\n",
      "Epoch 9/50\n",
      "1/1 - 0s - loss: 0.6111 - acc: 0.6639 - val_loss: 0.6850 - val_acc: 0.6384\n",
      "Epoch 10/50\n",
      "1/1 - 0s - loss: 0.5818 - acc: 0.6855 - val_loss: 0.6667 - val_acc: 0.6513\n",
      "Epoch 11/50\n",
      "1/1 - 0s - loss: 0.5721 - acc: 0.6916 - val_loss: 0.6304 - val_acc: 0.6688\n",
      "Epoch 12/50\n",
      "1/1 - 0s - loss: 0.5422 - acc: 0.7551 - val_loss: 0.6461 - val_acc: 0.7048\n",
      "Epoch 13/50\n",
      "1/1 - 0s - loss: 0.5791 - acc: 0.7695 - val_loss: 0.6710 - val_acc: 0.7002\n",
      "Epoch 14/50\n",
      "1/1 - 0s - loss: 0.4987 - acc: 0.7838 - val_loss: 0.6632 - val_acc: 0.7131\n",
      "Epoch 15/50\n",
      "1/1 - 0s - loss: 0.5537 - acc: 0.7920 - val_loss: 0.7022 - val_acc: 0.7168\n",
      "Epoch 16/50\n",
      "1/1 - 0s - loss: 0.5463 - acc: 0.7807 - val_loss: 0.7353 - val_acc: 0.7251\n",
      "Epoch 17/50\n",
      "1/1 - 0s - loss: 0.5315 - acc: 0.7910 - val_loss: 0.7022 - val_acc: 0.7223\n",
      "Epoch 18/50\n",
      "1/1 - 0s - loss: 0.4832 - acc: 0.7930 - val_loss: 0.6777 - val_acc: 0.7251\n",
      "Epoch 19/50\n",
      "1/1 - 0s - loss: 0.4477 - acc: 0.8105 - val_loss: 0.6668 - val_acc: 0.7242\n",
      "Epoch 20/50\n",
      "1/1 - 0s - loss: 0.4439 - acc: 0.7971 - val_loss: 0.6176 - val_acc: 0.7196\n",
      "Epoch 21/50\n",
      "1/1 - 0s - loss: 0.3993 - acc: 0.8309 - val_loss: 0.6136 - val_acc: 0.7196\n",
      "Epoch 22/50\n",
      "1/1 - 0s - loss: 0.3830 - acc: 0.8248 - val_loss: 0.6248 - val_acc: 0.7196\n",
      "Epoch 23/50\n",
      "1/1 - 0s - loss: 0.4062 - acc: 0.8473 - val_loss: 0.6505 - val_acc: 0.7205\n",
      "Epoch 24/50\n",
      "1/1 - 0s - loss: 0.4259 - acc: 0.8504 - val_loss: 0.6313 - val_acc: 0.7232\n",
      "Epoch 25/50\n",
      "1/1 - 0s - loss: 0.3858 - acc: 0.8504 - val_loss: 0.6221 - val_acc: 0.7232\n",
      "Epoch 26/50\n",
      "1/1 - 0s - loss: 0.3439 - acc: 0.8596 - val_loss: 0.6356 - val_acc: 0.7196\n",
      "Epoch 27/50\n",
      "1/1 - 0s - loss: 0.3333 - acc: 0.8709 - val_loss: 0.6512 - val_acc: 0.7205\n",
      "Epoch 28/50\n",
      "1/1 - 0s - loss: 0.3255 - acc: 0.8760 - val_loss: 0.6791 - val_acc: 0.7232\n",
      "Epoch 29/50\n",
      "1/1 - 0s - loss: 0.3593 - acc: 0.8791 - val_loss: 0.7117 - val_acc: 0.7214\n",
      "Epoch 30/50\n",
      "1/1 - 0s - loss: 0.3251 - acc: 0.8873 - val_loss: 0.7323 - val_acc: 0.7242\n",
      "Epoch 31/50\n",
      "1/1 - 0s - loss: 0.3256 - acc: 0.8770 - val_loss: 0.7427 - val_acc: 0.7288\n",
      "Epoch 32/50\n",
      "1/1 - 0s - loss: 0.3088 - acc: 0.9037 - val_loss: 0.7509 - val_acc: 0.7297\n",
      "Epoch 33/50\n",
      "1/1 - 0s - loss: 0.3048 - acc: 0.8934 - val_loss: 0.7523 - val_acc: 0.7371\n",
      "Epoch 34/50\n",
      "1/1 - 0s - loss: 0.2989 - acc: 0.8996 - val_loss: 0.7425 - val_acc: 0.7380\n",
      "Epoch 35/50\n",
      "1/1 - 0s - loss: 0.2847 - acc: 0.9047 - val_loss: 0.7396 - val_acc: 0.7362\n",
      "Epoch 36/50\n",
      "1/1 - 0s - loss: 0.2645 - acc: 0.9016 - val_loss: 0.7313 - val_acc: 0.7380\n",
      "Epoch 37/50\n",
      "1/1 - 0s - loss: 0.2811 - acc: 0.8975 - val_loss: 0.7350 - val_acc: 0.7362\n",
      "Epoch 38/50\n",
      "1/1 - 0s - loss: 0.2720 - acc: 0.9078 - val_loss: 0.6788 - val_acc: 0.7389\n",
      "Epoch 39/50\n",
      "1/1 - 0s - loss: 0.2603 - acc: 0.8986 - val_loss: 0.6679 - val_acc: 0.7371\n",
      "Epoch 40/50\n",
      "1/1 - 0s - loss: 0.2580 - acc: 0.9047 - val_loss: 0.6692 - val_acc: 0.7408\n",
      "Epoch 41/50\n",
      "1/1 - 0s - loss: 0.2809 - acc: 0.8955 - val_loss: 0.6916 - val_acc: 0.7408\n",
      "Epoch 42/50\n",
      "1/1 - 0s - loss: 0.2540 - acc: 0.9016 - val_loss: 0.7552 - val_acc: 0.7435\n",
      "Epoch 43/50\n",
      "1/1 - 0s - loss: 0.2629 - acc: 0.9139 - val_loss: 0.8007 - val_acc: 0.7445\n",
      "Epoch 44/50\n",
      "1/1 - 0s - loss: 0.2614 - acc: 0.9273 - val_loss: 0.8633 - val_acc: 0.7445\n",
      "Epoch 45/50\n",
      "1/1 - 0s - loss: 0.2316 - acc: 0.9057 - val_loss: 0.8980 - val_acc: 0.7500\n",
      "Epoch 46/50\n",
      "1/1 - 0s - loss: 0.2204 - acc: 0.9242 - val_loss: 0.9062 - val_acc: 0.7472\n",
      "Epoch 47/50\n",
      "1/1 - 0s - loss: 0.2326 - acc: 0.9160 - val_loss: 0.9067 - val_acc: 0.7537\n",
      "Epoch 48/50\n",
      "1/1 - 0s - loss: 0.2358 - acc: 0.9334 - val_loss: 0.8805 - val_acc: 0.7601\n",
      "Epoch 49/50\n",
      "1/1 - 0s - loss: 0.2196 - acc: 0.9211 - val_loss: 0.8471 - val_acc: 0.7592\n",
      "Epoch 50/50\n",
      "1/1 - 0s - loss: 0.2102 - acc: 0.9221 - val_loss: 0.8198 - val_acc: 0.7620\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(\n",
    "    train_flow, epochs=epochs, validation_data=test_flow, verbose=2, shuffle=False\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot the training history:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sg.utils.plot_history(history)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Evaluate the trained model on test citation links:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  ['...']\n",
      "1/1 [==============================] - 0s 9ms/step - loss: 0.1409 - acc: 0.9641\n",
      "  ['...']\n",
      "1/1 [==============================] - 0s 9ms/step - loss: 0.8198 - acc: 0.7620\n",
      "\n",
      "Train Set Metrics of the trained model:\n",
      "\tloss: 0.1409\n",
      "\tacc: 0.9641\n",
      "\n",
      "Test Set Metrics of the trained model:\n",
      "\tloss: 0.8198\n",
      "\tacc: 0.7620\n"
     ]
    }
   ],
   "source": [
    "train_metrics = model.evaluate(train_flow)\n",
    "test_metrics = model.evaluate(test_flow)\n",
    "\n",
    "print(\"\\nTrain Set Metrics of the trained model:\")\n",
    "for name, val in zip(model.metrics_names, train_metrics):\n",
    "    print(\"\\t{}: {:0.4f}\".format(name, val))\n",
    "\n",
    "print(\"\\nTest Set Metrics of the trained model:\")\n",
    "for name, val in zip(model.metrics_names, test_metrics):\n",
    "    print(\"\\t{}: {:0.4f}\".format(name, val))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx": "hidden",
    "tags": [
     "CloudRunner"
    ]
   },
   "source": [
    "<table><tr><td>Run the latest release of this notebook:</td><td><a href=\"https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/gcn-link-prediction.ipynb\" alt=\"Open In Binder\" target=\"_parent\"><img src=\"https://mybinder.org/badge_logo.svg\"/></a></td><td><a href=\"https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/gcn-link-prediction.ipynb\" alt=\"Open In Colab\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\"/></a></td></tr></table>"
   ]
  }
 ],
 "metadata": {
  "file_extension": ".py",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  },
  "mimetype": "text/x-python",
  "name": "python",
  "npconvert_exporter": "python",
  "pygments_lexer": "ipython3",
  "version": 3
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
